<?php

require_once("Model/ModelsInclude.php");

require_once("Layout/header.php");

/*
 * Istanza generica per accesso ad attributi del model.
 */
$c = Ordine::getInstance();
define("PARENT_PAGE_NAME","Ordini");
define("PAGE_NAME","Modifica Ordine");
define("PAGE_TITLE","Visualizza Dettagli&#47;Modifica Ordine");
global $pagesCtrlerEditLink, $pagesCtrlerAddLink, $pagesRemoveLink;

/*
 * Connessione DB.
 */
$db = new DatabaseManager();
$db->Connect();

/*
 * Stampa dell'header della pagina
 */
printHeader(PAGE_NAME, PAGE_TITLE, $c);

$IDToGet = $_GET["ID"];

$objectToEdit = $c->getFromDB($db, $IDToGet);

if($objectToEdit == NULL)
{
	echo('<p style=\"color:#f00;\"><b>Parametri della richiesta non validi!</b></p>');
	include("Layout/footer.php");
	die();
}

LayoutUtils::printEditPage($db, $objectToEdit, $pagesCtrlerEditLink[PARENT_PAGE_NAME]);

?>

<!-- Tabella associativa della relazione NxN COMPOSTA a 2 livelli -->

<div class="top-bar">
<h1>Gli articoli di questo ordine:</h1>
</div>
<div class="select-bar-void"></div>

<?php

global $pagesAssocEditLink;

$thisForeignKey = "idOrdine";
$thisForeignValue = $objectToEdit->dataTupla[STD_ID];

//primo livello

$assInst = ArticoloOrdine::getInstance();
$assocList = $assInst->getListFromDBByIDOrdine($db,$thisForeignValue);
$attribs = $assInst->getExtendedInfoAttributeLongNames();

$objsList = array();
foreach($assocList as $key => $assoc)
	$objsList[$key] = $assoc->getArticolo($db);

//secondo livello

$assInst2 = VariazioneArticoloOrdine::getInstance();
$assocList2 = $assInst2->getListFromDBByIDOrdine($db,$thisForeignValue);
$attribs2 = $assInst2->getExtendedInfoAttributeLongNames();

$objsList2 = array();
foreach($assocList2 as $key => $assoc)
	$objsList2[$key] = $assoc->getVariazioneArticolo($db);

//ogni oggetto del primo livello contiene quali oggetti del secondo livello

$assocSubList = array();
//$assocSubList è una array dove PER OGNI ARTICOLO di questa offerta
//contiene un altro sotto-array di chiavi che sono gli indici di tutte le
//VARIAZIONI ARTICOLO dell'articolo.
foreach($objsList as $key => $assocObj)
{
	$assocSubList[$key] = array();
	$idArticoloCurr = $assocObj->dataTupla[STD_ID];
	foreach($objsList2 as $key2 => $assocObj2)
	{
		if($idArticoloCurr == $assocObj2->dataTupla["idArticolo"])
			$assocSubList[$key][] = $key2;
	}
}

//riga aggiuntiva dove $otherRowsSpan rappresenta lo span delle colonne e
//$otherRowsValues rappresenta il testo da presentare in ogni cella.
$tot = 0;
foreach($assocList2 as $assoc)
	$tot += $assoc->dataTupla["Totale"];//$assoc->dataTupla["PrezzoNetto"]*$assoc->dataTupla["Quantita"];
$otherRowsValues = array("", "<h3 align='right'>Totale ordine:</h3>", "<h3 style=\"white-space:nowrap;\">".$tot." &euro;</h3>", "");
$otherRowsSpan = array(1,4,1,2);

define("ASSOC_PAGE_NAME","ArticoliOrdini");
define("ASSOC_2_PAGE_NAME","VariazioniArticoliOrdini");
define("ASSOC_ASSOCIATED_PAGE_NAME","Articoli");
define("ASSOC_ASSOCIATED_2_PAGE_NAME","Variazioni Articoli");

?>

<div class="table">
	<script language="javscript" type="text/javascript" >
		var removeAssocRedirectPage = <?= "'".$pagesRemoveLink[ASSOC_PAGE_NAME]."?".$thisForeignKey."=".$thisForeignValue."&ID='" ?>;
		function confirmRemoveAssoc(id)
		{
			if(confirm("Sicuro di voler eliminare questo oggetto?"))
				document.location.href = (removeAssocRedirectPage+id);
		}
		var removeAssoc2RedirectPage = <?= "'".$pagesRemoveLink[ASSOC_2_PAGE_NAME]."?".$thisForeignKey."=".$thisForeignValue."&ID='" ?>;
		function confirmRemoveAssoc2(id)
		{
			if(confirm("Sicuro di voler eliminare questo oggetto?"))
				document.location.href = (removeAssoc2RedirectPage+id);
		}
	</script>
	<table class="listing" cellpadding="0" cellspacing="0">
		<tr>
			<?php

			$colsnum = 0;
			foreach($attribs as $longname)
			{
				$colsnum++;
				echo('<th>'.$longname.'</th>');
			}
			echo('<th></th>');
			echo('<th></th>');
			$colsnum += 2;

			?>
		</tr>
		<?php

		for($i = 0; $i < count($objsList); $i++)
		{
			$detailsLink = $pagesAssocEditLink[ASSOC_PAGE_NAME].'?ID='.($assocList[$i]->dataTupla[STD_ID]);
			echo('<tr ondblclick="javascript:document.location.href=\''.$detailsLink.'\';" >');
			foreach($attribs as $name => $longname)
			{
				$rowspan = ($name == STD_ID ? 'rowspan="2"' : "");
				//vengono mostrati nella lista solo gli attribbuti più importanti
				$imp = isset($assInst->attribIsImportant[$name]) ? $assInst->attribIsImportant[$name] : 1;
				if($imp > 1)//se è molto importante allora usiamo lo stile rosso
					echo("<td class=\"style1\" ".$rowspan.">".htmlentities($assocList[$i]->getDataLabel($db,$name),ENT_QUOTES|ENT_IGNORE|ENT_HTML5)."</td>");
				else//altrimenti lo stile normale
					echo("<td ".$rowspan.">".htmlentities($assocList[$i]->getDataLabel($db,$name),ENT_QUOTES|ENT_IGNORE|ENT_HTML5)."</td>");
			}
			echo('<td rowspan="2"><a href="'.$detailsLink.'" ><img src="img/edit-icon.gif" width="16" height="16" title="Dettagli/Modifica" /></a></td>');
			echo('<td rowspan="2"><a href="javascript:confirmRemoveAssoc('.$assocList[$i]->dataTupla[STD_ID].');" ><img src="img/hr.gif" width="16" height="16" title="Rimuovi" /></a></td>');
			echo("</tr>");


			//******************************************************************
			//riga della sotto tabella del livello 2****************************
			//******************************************************************

			$assInst2->chachedArticolo = $objsList[$i];

			//******************************************************************

			echo('<tr>');
			echo('<td colspan="'.($colsnum-3).'">');//-3 eliminando la colonna dell'id e le 2 colonne laterali di modifica ed elimina
			?>
			<b>Le variazioni di questo articolo:</b>
			<?= ModelUtils::getFormOpening($pagesCtrlerAddLink[ASSOC_2_PAGE_NAME], "POST", "assoc2_".$i) ?>
			<table class="sub-listing" cellpadding="0" cellspacing="0">
				<tr>
					<?php

					$lvl2colsnum = 0;
					foreach($attribs2 as $longname)
					{
						$lvl2colsnum++;
						echo('<th>'.$longname.'</th>');
					}
					echo('<th></th>');
					echo('<th></th>');
					$lvl2colsnum += 2;

					?>
				</tr>
				<?php

				for($j = 0; $j < count($assocSubList[$i]); $j++)
				{
					$currAssoc = $assocList2[$assocSubList[$i][$j]];
					$currObj = $assocList2[$assocSubList[$i][$j]];
					$detailsLink2 = $pagesAssocEditLink[ASSOC_2_PAGE_NAME].'?ID='.($currAssoc->dataTupla[STD_ID]);
					echo('<tr ondblclick="javascript:document.location.href=\''.$detailsLink2.'\';" >');
					foreach($attribs2 as $name => $longname)
					{
						//vengono mostrati nella lista solo gli attribbuti più importanti
						$imp = isset($assInst2->attribIsImportant[$name]) ? $assInst2->attribIsImportant[$name] : 1;
						if($imp > 1)//se è molto importante allora usiamo lo stile rosso
							echo("<td class=\"style1\">".htmlentities($currAssoc->getDataLabel($db,$name),ENT_QUOTES|ENT_IGNORE|ENT_HTML5)."</td>");
						else//altrimenti lo stile normale
							echo("<td>".htmlentities($currAssoc->getDataLabel($db,$name),ENT_QUOTES|ENT_IGNORE|ENT_HTML5)."</td>");
					}
					echo('<td><a href="'.$detailsLink2.'" ><img src="img/edit-icon.gif" width="16" height="16" title="Dettagli/Modifica" /></a></td>');
					echo('<td><a href="javascript:confirmRemoveAssoc2('.$currAssoc->dataTupla[STD_ID].');" ><img src="img/hr.gif" width="16" height="16" title="Rimuovi" /></a></td>');
					echo("</tr>");
				}

				$lvl2colsnum--;
				echo("<tr class=\"newElementTableRow\"><td></td><td colspan=\"".$lvl2colsnum."\">Aggiungi nuovo:<input type=\"hidden\" name=\"".$thisForeignKey."\" value=\"".$thisForeignValue."\" /></td></tr>");
				echo("<tr class=\"newElementTableRow\"><td></td>");
				foreach($assInst2->attribNames as $name)
				{
					//il codice della chiave esterna associata a questo elemento in visualizzazione non deve essere immesso
					if($name == $thisForeignKey)
						continue;
					$attribCode = $assInst2->getAddFormCodeFromAttribute($db,$name);
					//se il codice restituito e vuoto allora questo attributo ha un valore di default nel DB che deve essere usato
					if($attribCode == "")
						continue;
					$lvl2colsnum--;
					echo('<td><b>'.$assInst2->attribLongNames[$name].'</b>: '.$attribCode.'</td>');
				}
				if($lvl2colsnum < 1)
					$lvl2colsnum = 1;
				echo("<td style=\"text-align: right;\" colspan=\"".$lvl2colsnum."\"><input type=\"submit\" value=\"Aggiungi\"></td>");
				echo("</tr>");

				?>
			</table>

			<?= ModelUtils::getFormClosing() ?>

			<?php

			echo('</td>');
			echo("</tr>");

			//******************************************************************
			
			echo('<tr>');
			echo('<td></td><td height="15" colspan="'.($colsnum-1).'"></td>');
			echo('</tr>');

		}

		if(isset($otherRowsValues) && $otherRowsValues != NULL)
		{
			echo('<tr>');
			for($i = 0; $i < count($otherRowsValues); $i++)// as $colspan => $colval)
			{
				echo('<td ');
				if($otherRowsSpan[$i] != 1)
					echo('colspan="'.$otherRowsSpan[$i].'" ');
				echo('>'.$otherRowsValues[$i].'</td>');
			}
			echo('</tr>');
		}
		?>

	</table>

	<?php LayoutUtils::printPrintButtons($c); ?>

	<br/><br/><h2><b>Aggiungi articolo:</b></h2>
	<?= ModelUtils::getFormOpening($pagesCtrlerAddLink[ASSOC_PAGE_NAME], "POST", "assoc") ?>
	<table class="listing" cellpadding="0" cellspacing="0">
	<?php

		echo("<tr class=\"newElementTableRow\"><th colspan=\"".$colsnum."\">Aggiungi nuovo:<input type=\"hidden\" name=\"".$thisForeignKey."\" value=\"".$thisForeignValue."\" /></th></tr>");
		echo("<tr class=\"newElementTableRow\">");
		foreach($assInst->attribNames as $name)
		{
			//il codice della chiave esterna associata a questo elemento in visualizzazione non deve essere immesso
			if($name == $thisForeignKey)
				continue;
			$attribCode = $assInst->getAddFormCodeFromAttribute($db,$name);
			//se il codice restituito e vuoto allora questo attributo ha un valore di default nel DB che deve essere usato
			if($attribCode == "")
				continue;
			$colsnum--;
			echo('<td><b>'.$assInst->attribLongNames[$name].'</b>: '.$attribCode.'</td>');
		}
		if($colsnum < 1)
			$colsnum = 1;
		echo("<td style=\"text-align: right;\" colspan=\"".$colsnum."\"><input type=\"submit\" value=\"Aggiungi\"></td>");
		echo("</tr>");

		?>

	</table>
	<?= ModelUtils::getFormClosing() ?>
</div>

<?php
include("Layout/footer.php");
?>
